/*
 * OS内核缺省配置
 *
 * author: lishutong
 * site: https://lishutong1024.cn / https://lishutong1024.github.cn
 */
#ifndef OS_DEF_H
#define OS_DEF_H

#include "os_cfg.h"

// 核心
#define OS_VERSION                      "1.0"           // 操作系统版本号

#ifndef OS_SYSTICK_MS
#define OS_SYSTICK_MS                   10              // 时钟节拍的周期，以ms为单位
#endif // OS_SYSTICK_MS

#ifndef OS_PLAT_STACK_GROW_HTL
#define OS_PLAT_STACK_GROW_HTL          1               // 栈从高地址往低地址增长
#endif // OS_PLAT_STACK_GROW_HTL

// 调度管理
#ifndef OS_SCHED_RR_ENABLE
#define OS_SCHED_RR_ENABLE              1               // 是否启用RR调度
#endif // OS_SCHED_RR_ENABLE

#ifndef OS_SCHED_DELAY_INSERT_LAST
#define OS_SCHED_DELAY_INSERT_LAST      1               // 定时列表插入按简单的无序插入方式
#endif // OS_SCHED_DELAY_INSERT_LAST

#ifndef OS_SCHED_BITMAP_CHECK_ENABLE
#define OS_SCHED_BITMAP_CHECK_ENABLE      0               // 开启就绪位图检查
#endif // OS_SCHED_BITMAP_CHECK_ENABLE

#ifndef OS_SCHED_DEBUG_ENABLE
#define OS_SCHED_DEBUG_ENABLE           0               // 开启调度切换的检查
#endif // OS_SCHED_DEBUG_ENABLE

#ifndef OS_SCHED_LOCK_ENABLE
#define OS_SCHED_LOCK_ENABLE            1               // 是否启动调试锁
#endif // OS_SCHED_LOCK_ENABLE

#ifndef OS_TASK_SLICE
#define OS_TASK_SLICE                   10              // 每个任务最大运行的时间片计数
#endif // OS_TASK_SLICE

#ifndef OS_SCHED_CHECK_TASK_STACK
#define OS_SCHED_CHECK_TASK_STACK       1               // 是否在任务调试中检查任务的栈
#endif // OS_SCHED_CHECK_TASK_STACK

#ifndef OS_SCHED_STACK_THRESHOLD
#define OS_SCHED_STACK_THRESHOLD        80              // 栈至少预留的大小，要考虑为中断预留的大小
#endif // OS_SCHED_STACK_THRESHOLD

// 任务管理
#ifndef OS_TASK_IDLE_STACK_SIZE
#define OS_TASK_IDLE_STACK_SIZE         (400)           // 空闲任务的堆栈大小，以字节计
#endif // OS_TASK_IDLE_STACK_SIZE

#ifndef OS_TASK_IDLE_PRIO
#define OS_TASK_IDLE_PRIO                10              // OS任务的优先级最大序号
#endif // OS_TASK_PRIO_MAX

#ifndef OS_TASK_EXIT_ENABLE
#define OS_TASK_EXIT_ENABLE              1               // 是否允许删除
#endif // OS_TASK_EXIT_ENABLE

#ifndef OS_TASK_SUSPEND_ENABLE
#define OS_TASK_SUSPEND_ENABLE          1               // 是否允许挂起任务
#endif // OS_TASK_SUSPEND_ENABLE

#ifndef OS_TASK_INFO_ENABLE
#define OS_TASK_INFO_ENABLE             1               // 使能任务查询相关API
#endif // OS_TASK_INFO_ENABLE

// 定长存储块
#ifndef OS_MBLOCK_ENABLE
#define OS_MBLOCK_ENABLE                1               // 是否使能存储块
#endif // OS_MBLOCK_ENABLE

#ifndef OS_MBLOCK_DBG_PRINT_ENABLE
#define OS_MBLOCK_DBG_PRINT_ENABLE      0               // 调试打印
#endif // OS_MBLOCK_DBG_PRINT_ENABLE

#ifndef OS_MBLOCK_INFO_ENABLE
#define OS_MBLOCK_INFO_ENABLE           1               // 使能存储块查询相关API
#endif // OS_MBLOCK_INFO_ENABLE

// 存储管理
#ifndef MEM_ALIGN_BYTES
#define MEM_ALIGN_BYTES                 sizeof(void *)               // 对齐的字节边界
#endif // MEM_ALIGN_BYTES

#ifndef OS_MEM_ENABLE
#define OS_MEM_ENABLE                   1               // 是否开启堆
#endif // OS_MEM_ENABLE

#ifndef OS_MEM_ALLOC_SIZE
#define OS_MEM_ALLOC_SIZE               (20*1024)        // 堆区域大小
#endif // OS_MEM_ALLOC_SIZE

#ifndef OS_MEM_DBG_PRINT_ENABLE
#define OS_MEM_DBG_PRINT_ENABLE         0               // 调试打印
#endif // OS_MEM_DBG_PRINT_ENABLE

#ifndef OS_MEM_INFO_ENABLE
#define OS_MEM_INFO_ENABLE              1               // 使能堆查询相关API
#endif // OS_MEM_INFO_ENABLE

// 互斥信号量
#ifndef OS_MUTEX_ENABLE
#define OS_MUTEX_ENABLE                 1               // 是否使能互斥信号量
#endif // OS_MUTEX_ENABLE

#ifndef OS_MUTEX_DBG_PRINT_ENABLE
#define OS_MUTEX_DBG_PRINT_ENABLE       0               // 调试打印
#endif // OS_MUTEX_DBG_PRINT_ENABLE

#ifndef OS_MUTEX_INFO_ENABLE
#define OS_MUTEX_INFO_ENABLE            1               // 使能锁查询相关API
#endif // OS_MUTEX_INFO_ENABLE

// 日志与调试
#ifndef OS_PARAM_CHECK_ENABLE
#define OS_PARAM_CHECK_ENABLE           1               // 是否启用参数检查
#endif // OS_PARAM_CHECK_ENABLE

#ifndef OS_ASSERT_ENABLE
#define OS_ASSERT_ENABLE                1               // 是否开启断言
#endif // OS_ASSERT_ENABLE

#ifndef OS_DBG_PRINT_ENABLE
#define OS_DBG_PRINT_ENABLE             1               // 是否开启dbg输出
#endif // OS_DBG_PRINT_ENABLE

#ifndef OS_LOG_INFO_EN
#define OS_LOG_INFO_EN                  1               // 应用层输出普通日志
#endif // OS_LOG_INFO_EN

#ifndef OS_LOG_ERROR_EN
#define OS_LOG_ERROR_EN                 1               // 应用层输出错误日志
#endif // OS_LOG_ERROR_EN

#ifndef OS_LIST_INFO_ENABLE
#define OS_LIST_INFO_ENABLE             1               // 支持显示链表信息函数
#endif // OS_LIST_INFO_ENABLE

// 任务管理
#ifndef OS_TASK_NAME_SIZE
#define OS_TASK_NAME_SIZE               6               // 名称长度
#endif // OS_TASK_NAME_SIZE

// 信号量相关
#ifndef OS_SEM_ENABLE
#define OS_SEM_ENABLE                   1               // 是否使能信号量
#endif // OS_SEM_ENABLE

#ifndef OS_SEM_DBG_PRINT_ENABLE
#define OS_SEM_DBG_PRINT_ENABLE         0               // 信号量调试打印
#endif // OS_SEM_DBG_PRINT_ENABLE

#ifndef OS_SEM_INFO_ENABLE
#define OS_SEM_INFO_ENABLE              1               // 使能信号量查询相关API
#endif // OS_SEM_INFO_ENABLE

// 消息队列
#ifndef OS_QUEUE_ENABLE
#define OS_QUEUE_ENABLE                 1               // 是否使能消息队列
#endif // OS_QUEUE_ENABLE

#ifndef OS_QUEUE_DBG_PRINT_ENABLE
#define OS_QUEUE_DBG_PRINT_ENABLE       0               // 调试打印
#endif // OS_QUEUE_DBG_PRINT_ENABLE

#ifndef OS_QUEUE_INFO_ENABLE
#define OS_QUEUE_INFO_ENABLE            1               // 使能消息查询相关API
#endif // OS_QUEUE_INFO_ENABLE

#ifndef OS_QUEUE_URGENT_ENABLE
#define OS_QUEUE_URGENT_ENABLE          1
#endif // OS_QUEUE_URGENT_ENABLE                        // 是否允许发送紧急消息

// 事件标志
#ifndef OS_EFLAGS_ENABLE
#define OS_EFLAGS_ENABLE                1               // 是否使能事件标志
#endif // OS_EFLAGS_ENABLE

#ifndef OS_EFLAGS_DBG_PRINT_ENABLE
#define OS_EFLAGS_DBG_PRINT_ENABLE      0               // 调试打印
#endif // OS_EFLAGS_DBG_PRINT_ENABLE

#ifndef OS_EFLAGS_INFO_ENABLE
#define OS_EFLAGS_INFO_ENABLE            1               // 使能消息查询相关API
#endif // OS_QUEUE_INFO_ENABLE

// 定时器
#ifndef OS_TIMER_ENABLE
#define OS_TIMER_ENABLE                 1               // 是否使能定时器
#endif // OS_TIMER_ENABLE

#ifndef OS_TIMER_NAME_SIZE
#define OS_TIMER_NAME_SIZE              3               // 定时器名称大小
#endif // OS_TIMER_NAME_SIZE

#ifndef OS_TIMER_TASK_STACK_SIZE
#define OS_TIMER_TASK_STACK_SIZE        1024            // 定时器任务的堆栈大小，以字节计
#endif // OS_TIMER_TASK_STACK_SIZE

#ifndef OS_TIMER_TASK_PRIO
#define OS_TIMER_TASK_PRIO              0               // 定时器任务的优先级
#endif // OS_TIMER_TASK_PRIO

#ifndef OS_TIMER_DBG_PRINT_ENABLE
#define OS_TIMER_DBG_PRINT_ENABLE       0               // 定时器调试信息打印
#endif // OS_TIMER_DBG_PRINT_ENABLE

#ifndef OS_TIMER_INFO_ENABLE
#define OS_TIMER_INFO_ENABLE            1               // 使能消息查询相关API
#endif // OS_TIMER_INFO_ENABLE

#ifndef OS_TASK_SWITCH_HOOK_ENABLE
#define OS_TASK_SWITCH_HOOK_ENABLE      0
#endif // OS_TASK_SWITCH_HOOK_ENABLE

#ifndef OS_TASK_IDLE_HOOK_ENABLE
#define OS_TASK_IDLE_HOOK_ENABLE        0               // 开启空闲任务回调
#endif // OS_TASK_IDLE_HOOK_ENABLE

#ifndef OS_SYSTICK_HOOK_ENABLE
#define OS_SYSTICK_HOOK_ENABLE          0
#endif // OS_SYSTICK_HOOK_ENABLE

#ifndef OS_LIB_USE_OWN
#define OS_LIB_USE_OWN                  1
#endif // OS_LIB_USE_OWN

#endif // OS_DEF_H
